home *** CD-ROM | disk | FTP | other *** search
Modula Implementation | 1995-11-25 | 5.2 KB | 167 lines |
- IMPLEMENTATION MODULE KbdEvnt;
-
- FROM SYSTEM IMPORT VAL,ADDRESS,SHIFT,WORD,ADR,TSIZE;
- FROM Strings IMPORT RightStr,EqualStr,Length,ClearStr,Concat,IsEmptyStr;
- FROM ConvertStr IMPORT IntToStr;
- FROM XBIOS104 IMPORT KeyTable,SetKeyTable, KeyTablePtr,KeyTrans,KeyTransPtr;
- FROM Chars IMPORT CAPGerman;
- FROM GEMAESbase IMPORT Disabled,MenuSelected,
- Object,GraphicString,GraphicTitle;
- FROM AES IMPORT ApplWrite;
- FROM EasyDialog IMPORT and,WorkTree,TreePROC;
-
- VAR
- laenge,ID : INTEGER;
- MessageBuffer : ARRAY [0..7] OF INTEGER;
- found : BOOLEAN;
- MenuString,
- ScanString : ARRAY [0..7] OF CHAR;
- AsciiValue : CHAR;
-
-
- PROCEDURE SearchMenuTree(MenuTree:ADDRESS; Index :INTEGER);
- VAR
- MenuObject : POINTER TO Object;
- s : POINTER TO ARRAY [0..40] OF CHAR;
- OK : BOOLEAN;
- BEGIN
- s:=ADR(MenuString);
- MenuObject:=MenuTree+ VAL(ADDRESS,(Index*TSIZE(Object)));
- IF (MenuObject^.type=GraphicString) AND ~and(MenuObject^.state,Disabled) THEN
- s:=MenuObject^.spec;
- END(*IF*);
- RightStr(s^,laenge,MenuString,OK);
- IF EqualStr(ScanString,MenuString)THEN
- MessageBuffer[0]:=MenuSelected;
- MessageBuffer[1]:=ID;
- MessageBuffer[2]:=0;
- MessageBuffer[3]:=3;
- MessageBuffer[4]:=Index;
- ApplWrite(ID,16,ADR(MessageBuffer));
- found:=TRUE
- END(*IF*);
- END SearchMenuTree;
-
- PROCEDURE ConcatScanString(VAR ScanString : ARRAY OF CHAR;KeyState,
- Key :INTEGER);
- VAR pKeyTable :KeyTablePtr;
- pKeyTa,KbdUnshift,KbdShift,KbdCapslock: KeyTransPtr;
- CASsing : ARRAY [1..1] OF CHAR;
- CharStr : ARRAY [1..1] OF CHAR;
- OK : BOOLEAN;
- scan : INTEGER;
- chr : CHAR;
- CONST
- KSHIFT =3;(* Linke und/oder rechte Shifttaste*)
- KALT =8;(* Alternate Taste*)
- KCTRL =4;(* Control Taste*)
-
- BEGIN
- scan:=SHIFT(Key,-8);
- ScanString:=0C;
- (************ Tastaturtabelle holen**************************)
- pKeyTa:=VAL(ADDRESS,-1);
- pKeyTable:=SetKeyTable( pKeyTa, pKeyTa, pKeyTa);
- KbdUnshift:=pKeyTable^.unshift;
- KbdShift:=pKeyTable^.shift;
- KbdCapslock:=pKeyTable^.capslock;
-
- (************* Scancode der Tastaturbelegung zuordnen*************)
- IF ~and(KeyState,KSHIFT) THEN
- chr:=CHR(VAL(INTEGER,KbdUnshift^[scan]));
- chr:=CAPGerman(chr);
- ScanString[0]:=' ';
- ELSE
- chr:=CHR(VAL(INTEGER,KbdShift^[scan]));
- ScanString[0]:=CHR(1);
- END(*IF*);
-
- CharStr[1]:=chr;
- AsciiValue:=chr;
- (***************** Zeichen für Shift, ctrl und alternate setzen******)
- IF and(KeyState,KALT) THEN
- CASsing[1]:=CHR(7);
- Concat(ScanString,CASsing,ScanString,OK);
- END(*IF*);
- IF and(KeyState,KCTRL) THEN
- Concat(ScanString,'^',ScanString,OK);
- END(*IF*);
- (******************** Buchstaben oder Funktionstasten anfügen*********)
- Concat(ScanString,CharStr,ScanString,OK);
-
- CASE scan OF
- 062H :
- Concat(ScanString,'HELP',ScanString,OK);
- |061H :
- Concat(ScanString,'UNDO',ScanString,OK);
- |01H :
- Concat(ScanString,'ESC',ScanString,OK);
- |0EH :
- Concat(ScanString,'BSPC',ScanString,OK);
- |053H :
- Concat(ScanString,'DEL',ScanString,OK);
- |0FH :
- Concat(ScanString,'TAB',ScanString,OK);
- |052H :
- Concat(ScanString,'INS',ScanString,OK);
- |047H :
- Concat(ScanString,'HOME',ScanString,OK);
-
- |03BH,054H :
- Concat(ScanString,'F1',ScanString,OK);
- |03CH,055H :
- Concat(ScanString,'F2',ScanString,OK);
- |03DH,056H :
- Concat(ScanString,'F3',ScanString,OK);
- |03EH,057H :
- Concat(ScanString,'F4',ScanString,OK);
- |03FH,058H :
- Concat(ScanString,'F5',ScanString,OK);
- |040H,059H :
- Concat(ScanString,'F6',ScanString,OK);
- |041H,05AH :
- Concat(ScanString,'F7',ScanString,OK);
- |042H,05BH :
- Concat(ScanString,'F8',ScanString,OK);
- |043H,05CH :
- Concat(ScanString,'F9',ScanString,OK);
- |044H,05DH :
- Concat(ScanString,'F10',ScanString,OK);
- ELSE
-
- END;(*CASE*)
-
- END ConcatScanString;
-
- PROCEDURE MenuSearch(AppID:INTEGER; MenuTree:ADDRESS;KeyState,Key:INTEGER;
- VAR Taste:CHAR):BOOLEAN;
- VAR
- scan,state :INTEGER;
- chr :CHAR;
- CharStr : ARRAY [0..0] OF CHAR;
- LastObj,i :CARDINAL;
- search :TreePROC;
-
-
- BEGIN
- i:=0;
- ID:=AppID;
- LastObj:=0;
- ClearStr(MenuString);
- ClearStr(ScanString);
- MenuString:=' ';
- ScanString:=' ';
- found:=FALSE;
- search:=SearchMenuTree;
- ConcatScanString(ScanString,KeyState,Key);
- Taste:=AsciiValue;
- laenge:=Length(ScanString);
- IF IsEmptyStr(ScanString) THEN
- RETURN FALSE;
- END(*IF*);
- WorkTree(MenuTree,0,0,search);
- RETURN found;
- END MenuSearch;
-
- END KbdEvnt.
-